package com.zfl.app;


import com.zfl.po.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringMain {
    public static void main(String[] args) {
        // 1. 加载Spring配置文件，创建Spring容器（ApplicationContext是容器核心接口）
        // ClassPathXmlApplicationContext：从类路径加载XML配置的容器实现
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

        // 2. 从容器中获取Bean（两种方式）
        // 方式1：通过Bean的id获取（需强制类型转换）
        UserService userService1 = (UserService) context.getBean("userService");
        // 方式2：通过id + 类型获取（推荐，无需强转）
        UserService userService2 = context.getBean("userService", UserService.class);
        // 方式3：通过类型获取（仅当该类型的Bean唯一时可用）
        UserService userService3 = context.getBean(UserService.class);

        // 验证：容器中同一个Bean是单例（默认）
        System.out.println(userService1 == userService2); // true
        System.out.println(userService1 == userService3); // true

        // 3. 使用Bean的方法
        userService1.sayHello("张三");

        // 4. 关闭容器（触发Bean的销毁方法，仅ClassPathXmlApplicationContext有close方法）
        ((ClassPathXmlApplicationContext) context).close();

    }
}
